package com.example.zhengchaojun.arcgis.map;

import android.view.View;

import com.esri.arcgisruntime.concurrent.ListenableFuture;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.layers.Layer;
import com.esri.arcgisruntime.mapping.view.Callout;
import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
import com.esri.arcgisruntime.mapping.view.IdentifyLayerResult;
import com.esri.arcgisruntime.mapping.view.LayerViewStateChangedListener;

/**
 * 类描述：地图操作代理
 * 作者：郑朝军 on 2018/5/12
 * 邮箱：1250393285@qq.com
 * 公司：武汉智博创享科技有限公司
 * 修改人：郑朝军 on 2018/5/12
 * 修改备注：
 */
public interface MapViewDelegate
{
    /**
     * 创建图层改变监听事件
     *
     * @param listener 图层视图改变监听
     */
    void createLayerViewStateChangedListener(LayerViewStateChangedListener listener);


    /**
     * 地图Touch事件监听
     *
     * @param listener 监听
     */
    void createOnTouchListener(View.OnTouchListener listener);


    /**
     * 创建图层：举例：WmsLayer
     *
     * @param layer 你要添加的图层
     * @return 是否成功
     */
    boolean createLayer(Layer layer);


    /**
     * 创建 画图的图层
     */
    void createGraphicsOverlay(GraphicsOverlay graphicsOverlay);


    /**
     * 屏幕坐标转地图坐标
     *
     * @param screenPoint 屏幕坐标
     * @return 地图坐标
     */
    Point updateScreenToLocation(android.graphics.Point screenPoint);


    /**
     * 更新 地图缩放比
     *
     * @param scale 缩放比：【大于1：小于1】：【放大：缩小】
     * @return
     */
    ListenableFuture<Boolean> updateViewpointScaleAsync(double scale);


    /**
     * 更新是否显示放大像
     *
     * @param enabled true:显示放大镜
     */
    void updateMagnifierWihtPanMapEnabled(boolean enabled);
    
    /**
     * 更新视图中心点
     *
     * @param point 地图坐标点
     * @return
     */
    ListenableFuture<Boolean> updateViewpointCenterAsync(Point point);


    /**
     * 查询地图标注
     *
     * @return 标注
     */
    Callout queryMapCallout();


    /**
     * 查询异步地识别给定层中的地质元素
     *
     * @param layer            图层
     * @param screenPoint      屏幕点
     * @param tolerance        最大允许值是100DP。
     * @param returnPopupsOnly
     * @param maximumResults
     * @return
     */
    ListenableFuture<IdentifyLayerResult> queryIdentifyLayerAsync(Layer layer, android.graphics.Point screenPoint, double tolerance, boolean returnPopupsOnly, int maximumResults);
}
